package org.example.netty.handler.channel;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import org.example.netty.mgt.ConnectionManager;
import org.example.netty.model.CustomMessage;

public abstract class AbstractBusinessHandler extends SimpleChannelInboundHandler<CustomMessage> {
    protected final ConnectionManager connectionManager;

    public AbstractBusinessHandler(ConnectionManager connectionManager) {
        this.connectionManager = connectionManager;
    }

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        //将 channel 放入 connectionManager中进行管理
        if (connectionManager.getChannel(ctx.channel().id())==null){//不空则进行添加操作
            connectionManager.putChannel(ctx.channel());
        }
        //调用父类的 channelActive ，其实代码逻辑就是调用下一个handler的 channelActive 方法（头部方向）
        super.channelActive(ctx);
    }

    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        //将 channel 从 connectionManager中移除
        if(connectionManager.getChannel(ctx.channel().id())!=null){//不为空的时候进行添加操作
            connectionManager.removeChannel(ctx.channel());
        }
        //调用父类的 channelInactive ，其实代码逻辑就是调用下一个handler的 channelInactive 方法（头部方向）
        super.channelInactive(ctx);
    }
}
